Дисципліна “Засоби системного програмування”
Структура програми написаної мовою програмування СІ. Прокоментувати програму та вказати результат.
а) int x=1, y=2;
#include <stdio.h>
void main (void)
{ extern int x;
printf ("x=%d y=%d \n", x, y);
{ int x=3; printf ("x=%d y=%d \n", x, y); }
{ int y=4; printf ("x=%d y=%d \n", x, y); }
}
x=3 y=4
x=3 y=4
x=4 y=5
x=1 y=2
x=3 y=2
x=1 y=4
б) int x=2, y=3;
#include <stdio.h>
void main (void)
{ extern int x;
printf ("x=%d y=%d \n",++x,++y);
{ int x=3; printf ("x=%d y=%d \n",x++,y++); }
{ int y=4; printf ("x=%d y=%d \n",++x,++y); }
}
2. Поняття СІ-машини. Сутність передпроцесора. Макровизначення та макрофункції. Прокоментувати програму та вказати результат.
a-b=-11
а) #define PRN(v) printf(#v"=%d",v)
#define a 5-b
#define b c-5
void main(void)
{ int c=3
PRN(a-b);
}
7
-6
б) #include <stdio.h>
#define NEW(x) 2*x
void main()
{ int y=2;
printf("\n%d", NEW(y+3) );
printf("\n%d", y*NEW(-y+2) );
}
9 5
в) #define MAX(a,b) (a)>(b) ? (a) : (b)
void main()
{ int x=5;
printf("%d %d", MAX( (x++)+3, x-2 ), x);
}
3. Характеристика типів даних мови програмування СІ. Перетворення типів даних.
Прокоментувати програму та вказати результат.
52-1
а) #define NEW N*N
#define N 7
#include <stdio.h>
void main(void)
{ int a=NEW;
printf("%d -%c", a+2, a++);
49 1
}
б) #include <stdio.h>
void main(void)
{ int і = 030061;
printf("%d %c\n", (char)i, *(char*)&і );
}
65 - C
в) #include <stdio.h>
void main(void)
{ int a=0x4142;
printf("%d - %c", a /256, a+1 );
}
4. Поняття покажчика в мові програмування СІ. Покажчики та масиви. Адресна арифметика. Прокоментувати програму та вказати результат.
3
5
а) #include <stdio.h>
void main(void)
{ char *ptr;
for( ptr="12345"; *++ptr; )
printf(" %c \n",*(ptr++ +1));
}
234567
4567
67
б) #include <stdio.h>
void main(void)
{ char s[ ]="1234567";
int *p=(int*)&s[1];
for(; (char)*p; )
printf("%s\n", (char*)p++);
}
345
5
в) #include <stdio.h>
void main(void)
{ char *p;
for(p="12345"; *++p; )
puts(p++ +1);
}
5. Операції мови програмування СІ та їх пріоритет. Порядок обчислення виразів. Побічні ефекти. Перетворення та приведення типів. Прокоментувати програму та вказати результат.
4 5 -1
а) #include <stdio.h>
void main(void)
{ int a=3, b=6, c=1;
c -= -(a++) + --b;
printf("%d %d %d\n", a, b, c);
}
-3 5 2
б) #include <stdio.h>
void main(void)
{ int a = -2, b = 5, c = 3;
c -= (a--) + (b | 02) >> 2;
printf( "%d %d %d\n", a, b, c );
}
в) #include <stdio.h>
-16 64
void main(void)
{ int b = 63, a;
a = -(b+=1) >>2 ;
printf("%d %d ", a, b);
}
1 1 3
г) #include <stdio.h>
void main(void)
{ int a = 2, b = 3, c = 4;
c += (b&=1) - a--;
printf( "%d %d %d\n", a, b, c );
}
6. Функції та структура програми мовою програмування СІ. Оголошення функцій. Поняття прототипу. Порядок передачі та перетворення аргументів.
Написати функцію.
а) Написати СІ-функцію згідно прототипу char* strstring(char *str1, char* str2). Функція повертає покажчик на перше входження інвертованого рядка згідно адреси str2 в рядок, адреса якого задається значенням аргументу str1.
б) Написати функцію, яка із двох рядків тексту формує третій рядок способом вибору символів, які не повторюються в перших двох. Аргументами функції являються адреси вхідних рядків. Функція повертає адресу утвореного рядка.
в) Написати СІ-функцію для вводу з клавіатури шістнадцяткового числа цілого типу за допомогою стандартної функції getchar().
г) Написати функцію виводу даних цілого типу на екран у двійковій системі числення за допомогою стандартної функції putchar();
д) Написати функцію пошуку в списку групи студентів із заданим прізвищем згідно прототипу: int find_name_list( char **list,...